# 该文件内是专门用来写处理websocket请求的视图函数


from channels.generic.websocket import WebsocketConsumer
from channels.exceptions import StopConsumer


consumer_object_list = []

class ChatConsumer(WebsocketConsumer):
    def websocket_connect(self, message):
        """
        客户端发来链接请求之后就会自动触发
        :param message:
        :return:
        """
        print('连接成功')
        self.accept()  # 向服务端发送加密字符串
        # self就是每一个客户端对象
        # 链接成功 我就将当前对象放入全局的列表中
        consumer_object_list.append(self)


    def websocket_receive(self, message):
        """
        客户端向服务端发送消息就会自动触发
        :param message:内部包含客户端给你发送的消息  {'type': 'websocket.receive', 'text': '大宝贝'}
        :return:
        """
        print('接收到新消息....')
        print(message)
        # 给客户端回消息
        # self.send(text_data=message.get('text'))

        # 给列表中所有的对象都发送消息
        for obj in consumer_object_list:
            obj.send('服务器回复信息..')


    def websocket_disconnect(self, message):
        """
        客户端主动断开链接之后自动触发
        :param message:
        :return:
        """
        print('断开链接了')
        # 服务端断开链接 就去列表中删除对应的客户端对象
        consumer_object_list.remove(self)
        raise StopConsumer